package com.shen.future;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;


/**
 * 这里的异步调用可以和ajax类比
 * ajax有一个成功后回调方法success()
 * 和一个失败回调方法error()
 * 这里的completableFuture也有类似的方法
 */
public class Demo01 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        /**
         * Void 是void的包装类，表示无返回值
         */
        CompletableFuture<Void> completableFuture= CompletableFuture.runAsync(()->{
            try {
                TimeUnit.SECONDS.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+"runAsync=>Void");
        });

        System.out.println("aaaaaaaaaaa");
        completableFuture.get();//获取阻塞执行结果
        System.out.println("bbbbbbbbbbbbbb");

        /**
         * aaaaaaaaaaa          如果按照线程执行的方式，在输出aaaaaaaaaaa会先输出 ForkJoinPool.commonPool-worker-1runAsync=>Void
         * ForkJoinPool.commonPool-worker-1runAsync=>Void      当completableFuture.get()执行完成之后才会输出bbbbbbbbbbbbbb
         * bbbbbbbbbbbbbb
         */
    }
}
